package com.flex.core.utils;

import java.io.IOException;
import java.util.Collection;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

public class JsonUtils {
	
	/**
	 * 通过对象生成此对象的json字符串
	 * @param obj
	 * @return
	 */
	public static String buildJsonStr(Object obj){
		String json = "";
		if (isArray(obj)) {
			JSONArray jsonArray = JSONArray.fromObject(obj);
			json = jsonArray.toString();
		} else {
			JSONObject jsonObject = JSONObject.fromObject(obj);
			json = jsonObject.toString();
		}
		return json;
	}
	
	/**
	 * 将接收到的json格式的字符串转换成指定的对象
	 * 
	 * @param json
	 *            json格式的字符串
	 * @param target
	 *            目标对象
	 * @throws IOException
	 */
	public static void getObjFromJson(String json, Object target)
			throws IOException {
		if (target != null && json.length() > 0 && json.startsWith("[")
				&& json.endsWith("]")) {
			JSONArray jsonArray = JSONArray.fromObject(json);
			if (isArray(target)) {
				JSONArray.toArray(jsonArray, target, new JsonConfig());
			} else {
				JSONArray.toList(jsonArray, target, new JsonConfig());
			}
		} else {
			JSONObject jsonObject = JSONObject.fromObject(json);
			JSONObject.toBean(jsonObject, target, new JsonConfig());
		}
	}
	
	/**
	 * 判断对象是否是集合类型
	 * 
	 * @param obj
	 *            被检查的对象
	 * @return
	 */
	public static boolean isArray(Object obj) {
		return obj instanceof Collection || obj.getClass().isArray();
	}


}
